package com.TestDemo.Test2;

import java.util.UUID;

public class LoadingTest {
    public static void main(String[] args) {
        System.out.println(MyParentTest.str);  // 本质上，调用类并没有直接用用到定义常量的类，因此并不会触发定义常量的类的初始化
                                                // 这里指的是将常量存放到了MyTest2的常量池中，之后MyTest2与MyParent2就没有任何关系 了。

        System.out.println(MyParentTest1.str);

    }
}


class MyParentTest{
    // 常量在编译阶段会存入到调用这个常量的方法所在的类的常量池中(将常量存放到了LoadingTest的常量池)
    public static final String str = "hello word";
    static {
        System.out.println("MyParentTest  static block");  // 这一行能输出吗？不会
    }
}



class MyParentTest1{
    public static final String str = UUID.randomUUID().toString();  // 当一个常量的值并非编译期间可以确定的，
                                                                    // 那么其值就不会被放到调用类的常量池中，
    // 程序运行时，会导致主动使用这个常量所在的类，显然就会导致这个类被初始化
    static {
        System.out.println("Myparent3 static block"); // 这一行能输出吗？会

         }
}

